//package com.inspur.edp.cef.generator.repository;
//
//import com.inspur.edp.bef.bizentity.GspBizEntityObject;
//import com.inspur.edp.bef.bizentity.GspBusinessEntity;
//import com.inspur.edp.cef.api.attr.*;
//import com.inspur.edp.cef.designtime.api.IGspCommonDataType;
//import com.inspur.edp.cef.entity.config.CefConfig;
//import com.inspur.edp.cef.entity.config.MgrConfig;
//import com.inspur.edp.cef.entity.config.RepositoryConfig;
//import com.inspur.edp.cef.entity.dependenceTemp.DataValidator;
//import com.inspur.edp.cef.gencommon.CefPropertyInfo;
//import com.inspur.edp.cef.gencommon.MediateType;
//import com.inspur.edp.cef.gencommon.ReflectionUtils;
//import com.inspur.edp.cef.generator.coreGenerator.base.CefCoreGeneratorContext;
//import com.inspur.edp.cef.generator.coreGenerator.base.entitygen.EntityGeneratorContext;
//import com.inspur.edp.cef.generator.coreGenerator.base.mgrGenerator.ManagerGeneratorContext;
//import com.inspur.edp.cef.generator.overall.CefGeneratorContext;
//import com.inspur.edp.cef.generator.overall.GeneratorUtil;
//import com.inspur.edp.cef.generator.repository.common.CefMgrTypeInfo;
//import com.inspur.edp.cef.generator.repository.common.CompileContext;
//import com.inspur.edp.cef.generator.repository.common.IntermediateType;
//
//import java.util.ArrayList;
//import java.util.HashMap;
//import java.util.Iterator;
//import java.util.List;
//
//public abstract class CefGenerateContext extends CefCoreGeneratorContext {
//    private IGspCommonDataType gspCommonDataType;
//    private CefConfig cefConfig;
//    private CefMgrTypeInfo parentTypeInfo;
//    private ArrayList<CefMgrTypeInfo> privateMgrTypes;
//    private CefMgrTypeInfo privateCurrentTypeInfo;
//    private Class privateEntityRepositoryFactory;
//    private Class privateNestedRepositoryFactory;
//    private Class privateNestedManagerFactory;
//    private IntermediateType privateRepositoryType;
//    private IntermediateType privateManagerImplType;
//    private IntermediateType privateMainDataType;
//    private HashMap<String, IntermediateType> privateEntityMediateTypes = new HashMap();
//    private HashMap<String, IntermediateType> privateEntityDataMediateTypes = new HashMap();
//    private IntermediateType privateAccessorCreatorType;
//    private HashMap<String, IntermediateType> privateAccessorMediateTypes = new HashMap();
//    private CompileContext compileContext;
////    private EntityGeneratorContext privateEntityContext;
//    private String versionControlPropName;
//    private String genPath;
//    private ManagerGeneratorContext managerGeneratorContext;
//    private MediateType mainDataSerType;
//
//    protected CefGenerateContext(CefGeneratorContext cefGenContext, IGspCommonDataType gspCommonDataType) {
//        super(cefGenContext);
//        this.gspCommonDataType = gspCommonDataType;
//        initCefConfig();
//    }
//
//    private void initCefConfig(){
//        CefConfig cefConfig = new CefConfig();
//        cefConfig.setID(getBE().getGeneratedConfigID());
//        cefConfig.setBEID(getBE().getID());
//        cefConfig.setDotnetID(getBE().getDotnetGeneratedConfigID());
//        //todo  wangmj getBefConfigId(getBeGenCtx().getParentBE()) 怎么获取？
//        if(getBE().getDependentEntityId().isEmpty()){
////            cefConfig.setSourceID(getBE().get);
//        }
//        else {
//            cefConfig.setSourceID("");
//        }
//        cefConfig.setDefaultNamespace(getBE().getGeneratingAssembly() + "." + getBE().getCode().toLowerCase());
//        this.cefConfig = cefConfig;
//
//        //todo wangmj MgrConfig待更新
//        MgrConfig mgrConfig = new MgrConfig();
//        mgrConfig.setAssembly(getCefGenContext().getMgrAssemblyName());
//        this.cefConfig.setMgrConfig(mgrConfig);
//
//        RepositoryConfig repositoryConfig = new RepositoryConfig();
//        this.cefConfig.setRepositoryConfig(repositoryConfig);
//    }
//
//    public GspBusinessEntity getBE(){
//        return ((GspBizEntityObject)this.gspCommonDataType).getBelongModel();
//    }
//
//    public final CefConfig getCefConfig() {
//        return this.cefConfig;
//    }
//
//    public final CefMgrTypeInfo getParentTypeInfo() {
//        return this.parentTypeInfo;
//    }
//
//    public final ArrayList<CefMgrTypeInfo> getMgrTypes() {
//        return this.privateMgrTypes;
//    }
//
//    public final CefMgrTypeInfo getCurrentTypeInfo() {
//        return this.privateCurrentTypeInfo;
//    }
//
//    public final Class entityRepositoryFactory() {
//        return this.privateEntityRepositoryFactory;
//    }
//
//    public final Class nestedRepositoryFactory() {
//        return this.privateNestedRepositoryFactory;
//    }
//
//    public final Class nestedManagerFactory() {
//        return this.privateNestedManagerFactory;
//    }
//
//    public final void setRepositoryType(IntermediateType value) {
//        this.privateRepositoryType = value;
//    }
//
//    public final IntermediateType getManagerImplType() {
//        return this.privateManagerImplType;
//    }
//
//    public final void setManagerImplType(IntermediateType value) {
//        this.privateManagerImplType = value;
//    }
//
//    public final IntermediateType getMainDataType() {
//        return this.privateMainDataType;
//    }
//
//    public final void setMainDataType(IntermediateType value) {
//        this.privateMainDataType = value;
//    }
//
//    public final void setAccessorCreatorType(IntermediateType value) {
//        this.privateAccessorCreatorType = value;
//    }
//
//    public CompileContext getCompileContext() {
//        return this.compileContext;
//    }
//
//    public void setCompileContext(CompileContext compileContext) {
//        this.compileContext = compileContext;
//    }
//
////    public final EntityGeneratorContext getEntityContext() {
////        return this.privateEntityContext;
////    }
//
////    public final void setEntityContext(EntityGeneratorContext value) {
////        this.privateEntityContext = value;
////    }
//
//    protected abstract Class getNestedRepositoryFactory();
//
//    protected abstract Class getNestedManagerFactory();
//
////    protected abstract Class getEntityRepositoryFactory();
//
//    public String getDefaultNamespace() {
//        return this.getCefConfig().getDefaultNamespace();
//    }
//
//    protected abstract boolean getIsEntityData();
//
//    protected abstract void setIsEntityData(boolean var1);
//
//    public Class childAttrType() {
//        return this.getChildAttrType();
//    }
//
//    public Class dataTypeAttrType() {
//        return this.getDataTypeAttrType();
//    }
//
//    public Class extendChildAttribute() {
//        return this.getExtendChildAttribute();
//    }
//
//    protected Class getChildAttrType() {
//        return ChildAttribute.class;
//    }
//
//    protected Class getDataTypeAttrType() {
//        return NestedConfigAtrribute.class;
//    }
//
//    protected Class getExtendChildAttribute() {
//        return ExtendChildAttribute.class;
//    }
//
////    public final I18nResourceAttribute getI18nModelInfoType() {
////        Class mgrImplType = this.getCurrentTypeInfo().getInterfaceType();
////        I18nResourceAttribute modelResInfoAttr = (I18nResourceAttribute)mgrImplType.getAnnotation(I18nResourceAttribute.class);
////        return modelResInfoAttr;
////    }
//
//    public final String getVersionControlPropName() {
//        if (this.versionControlPropName != null && !this.versionControlPropName.isEmpty()) {
//            return this.versionControlPropName;
//        } else {
//            Class type = this.getCurrentTypeInfo().getEntityEntityTypeInfo().getDataInterfaceType();
//            List<CefPropertyInfo> props = GeneratorUtil.getProps(type);
//            Iterator var3 = props.iterator();
//
//            CefPropertyInfo item;
//            VersionControlAttribute attr;
//            do {
//                if (!var3.hasNext()) {
//                    return "";
//                }
//
//                item = (CefPropertyInfo)var3.next();
//                attr = (VersionControlAttribute) ReflectionUtils.getMethodAnnotation(item.getPropertyMethod(), VersionControlAttribute.class);
//            } while(attr == null);
//
//            this.versionControlPropName = item.getPropertyName();
//            return this.versionControlPropName;
//        }
//    }
//
//    private Class getEntityType(Class mgrType) {
//        CefEntityAttribute mgrAttribute = (CefEntityAttribute)mgrType.getAnnotation(CefEntityAttribute.class);
//        DataValidator.checkForNullReference(mgrAttribute, "CefActionAttribute");
//        return mgrAttribute.entityActionType();
//    }
//
//    public String getRootCompileUnitGenPath() {
//        return this.genPath;
//    }
//
//    void setRootCompileUnitGenPath(String genPath) {
//        this.genPath = genPath;
//    }
//
//    public ManagerGeneratorContext getManagerGeneratorContext() {
//        return this.managerGeneratorContext;
//    }
//
//    public void setManagerGeneratorContext(ManagerGeneratorContext managerGeneratorContext) {
//        this.managerGeneratorContext = managerGeneratorContext;
//    }
//
//    public MediateType getMainDataSerType() {
//        return this.mainDataSerType;
//    }
//
//    public void setMainDataSerType(MediateType mainDataSerType) {
//        this.mainDataSerType = mainDataSerType;
//    }
//}
//
